package hermes.persistencia;

import hermes.controle.ClasseNegocio;
import hermes.persistencia.mapeadores.ClasseMapeadora;
import java.sql.SQLException;
import java.util.ArrayList;

public class ControlePersistencia implements ClassePersistencia{

    private OperacoesBanco operacoesBD;
    private ConexaoBancoDados cdb;

    public ControlePersistencia(){
        operacoesBD = new OperacoesBanco();
    }

    public Integer getNumeroSC() throws SQLException{
        return operacoesBD.getUltimoID();
    }

   @Override
    public boolean inserir(ClasseNegocio classeNegocio, ClasseMapeadora classeMapeadora){
        return operacoesBD.inserirBancoDados(classeNegocio, classeMapeadora);
    }

    @Override
    public void excluir(Integer idObjeto, ClasseMapeadora classeMapeadora){
        operacoesBD.excluirBancoDados(idObjeto, classeMapeadora);
    }

    @Override
    public void alterar(Integer idObjeto, ClasseNegocio classeNegocio, ClasseMapeadora classeMapeadora){
        operacoesBD.alterarBancoDados(idObjeto, classeNegocio, classeMapeadora);
    }

    @Override
    public void recarregar(Integer idObjeto, ClasseNegocio classeNegocio, ClasseMapeadora classeMapeadora){
        ArrayList<Object> arrayRegistro = operacoesBD.recuperarBancoDados(idObjeto, classeMapeadora);
        classeNegocio.setTodosAtributos(arrayRegistro);
    }

    @Override
    public ArrayList<ClasseNegocio> listarObjetos(ClasseMapeadora classeMapeadora) {
        ArrayList array = operacoesBD.recuperarListaBancoDados(classeMapeadora);
        ClasseNegocio c = null;
        ArrayList arrayObjeto = null;
        
        ArrayList<ClasseNegocio> listaObjetos = new ArrayList<ClasseNegocio>();
        int i = 0;
        int incremento = classeMapeadora.qtdCamposBD();
        while(i < array.size()){
            arrayObjeto = new ArrayList();
            for(int j=i; j<(i+incremento); j++){
                arrayObjeto.add(array.get(j));
            }
            c = classeMapeadora.getIntanciaClasseNegocio();
            c.setTodosAtributos(arrayObjeto);
            listaObjetos.add(c);
            i+=incremento;
        }
        return listaObjetos;
    }

    
    @Override
    public ArrayList<ClasseNegocio> sqlBuscar(ClasseMapeadora classeMapeadora,String campo, String argumento) {
        ArrayList array = operacoesBD.buscarBancoDados(classeMapeadora, campo, argumento);
        ClasseNegocio c=null;
        ArrayList arrayObjeto = null;

        ArrayList<ClasseNegocio> listaObjetos = new ArrayList<ClasseNegocio>();
        int i = 0;
        int incremento = classeMapeadora.qtdCamposBD();
        while(i < array.size()){
            arrayObjeto = new ArrayList();
            for(int j=i; j<(i+incremento); j++){
                arrayObjeto.add(array.get(j));
            }
            c = classeMapeadora.getIntanciaClasseNegocio();
            c.setTodosAtributos(arrayObjeto);
            listaObjetos.add(c);
            i+=incremento;
        }
        return listaObjetos;
   
    }
    @Override
    public ArrayList buscar(ClasseMapeadora classeMapeadora, Integer idObjeto) {
        ArrayList arraylist =operacoesBD.buscarBancoDados(classeMapeadora, idObjeto);
        return arraylist;
    }

}
